package DesignPatterns.singleton;

/**
 * 线程安全的懒加载 单例-改进
 * 这是对上一个的改进，改进方向是缩小锁的粒度，下面代码猛一看感觉没问题，其实再一看就会发现有安全漏洞，当并发高时，肯定存在多个线程都进入到实例为空的逻辑内部，然后排队等待锁，这时候就会重复创建对象了
 * 加载模式：懒加载
 * 优点：降低了锁粒度
 * 缺点：高并发无法保证单例
 */
public class Single5 {
    private static Single5 single;
    private Single5(){}
    public static Single5 getInstance(){
        if(single==null){//还没对象
            synchronized (Single5.class){
                return single=new Single5();
            }
        }
        return single;
    }
}
